Skip to main content

6.4 组 4:访存与原子(unit: lsu,301 条)

cache 维护(3 条)​

CACHE​

语法(Syntax)

cache.inv.l1
cache.inv.l2
cache.wb.l2
变体编码延迟语义标志
cache.inv.l1SYS op opcode=0x4e f5=0x9async:vm无效化本 half-core 的 L1D 与纹理 cache(device 级 acquire)ei co
cache.inv.l2SYS op opcode=0x4e f5=0xaasync:vm无效化 L2 中非一致 host 内存行(system 级 acquire)ei co
cache.wb.l2SYS op opcode=0x4e f5=0xbasync:vst回写非一致 host 内存的脏 L2 行(system 级 release)ei co

向量加载(40 条)​

LD​

语法(Syntax)

ld.global.u8 rd:v rs1:vp^2 imm:s24 cpol:cpol
ld.global.i8 rd:v rs1:vp^2 imm:s24 cpol:cpol
ld.global.u16 rd:v rs1:vp^2 imm:s24 cpol:cpol
ld.global.i16 rd:v rs1:vp^2 imm:s24 cpol:cpol
ld.global.b32 rd:v rs1:vp^2 imm:s24 cpol:cpol
ld.global.b64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
ld.global.b96 rd:v^3 rs1:vp^2 imm:s24 cpol:cpol
ld.global.b128 rd:v^4 rs1:vp^2 imm:s24 cpol:cpol
ld.ubase.u8 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.ubase.i8 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.ubase.u16 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.ubase.i16 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.ubase.b32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.ubase.b64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.ubase.b96 rd:v^3 rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.ubase.b128 rd:v^4 rs2:up^2 rs1:v imm:s24 cpol:cpol
ld.buf.u8 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.buf.i8 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.buf.u16 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.buf.i16 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.buf.b32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.buf.b64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.buf.b96 rd:v^3 rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.buf.b128 rd:v^4 rs2:d4^4 rs1:v imm:s24 cpol:cpol
ld.shared.u8 rd:v rs1:v imm:s24
ld.shared.i8 rd:v rs1:v imm:s24
ld.shared.u16 rd:v rs1:v imm:s24
ld.shared.i16 rd:v rs1:v imm:s24
ld.shared.b32 rd:v rs1:v imm:s24
ld.shared.b64 rd:v^2 rs1:v imm:s24
ld.shared.b96 rd:v^3 rs1:v imm:s24
ld.shared.b128 rd:v^4 rs1:v imm:s24
ld.scratch.u8 rd:v rs1:v imm:s24
ld.scratch.i8 rd:v rs1:v imm:s24
ld.scratch.u16 rd:v rs1:v imm:s24
ld.scratch.i16 rd:v rs1:v imm:s24
ld.scratch.b32 rd:v rs1:v imm:s24
ld.scratch.b64 rd:v^2 rs1:v imm:s24
ld.scratch.b96 rd:v^3 rs1:v imm:s24
ld.scratch.b128 rd:v^4 rs1:v imm:s24
变体编码延迟语义标志
ld.global.u8M op opcode=0x15 f5=0x0 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 零扩展读取 8 位ld
ld.global.i8M op opcode=0x15 f5=0x1 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 符号扩展读取 8 位ld
ld.global.u16M op opcode=0x15 f5=0x2 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 零扩展读取 16 位ld
ld.global.i16M op opcode=0x15 f5=0x3 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 符号扩展读取 16 位ld
ld.global.b32M op opcode=0x15 f5=0x4 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 读取 32 位ld
ld.global.b64M op opcode=0x15 f5=0x5 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 读取 64 位ld
ld.global.b96M op opcode=0x15 f5=0x6 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 读取 96 位ld
ld.global.b128M op opcode=0x15 f5=0x7 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);d = 读取 128 位ld
ld.ubase.u8M op opcode=0x15 f5=0x0 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 零扩展读取 8 位ld
ld.ubase.i8M op opcode=0x15 f5=0x1 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 符号扩展读取 8 位ld
ld.ubase.u16M op opcode=0x15 f5=0x2 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 零扩展读取 16 位ld
ld.ubase.i16M op opcode=0x15 f5=0x3 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 符号扩展读取 16 位ld
ld.ubase.b32M op opcode=0x15 f5=0x4 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 读取 32 位ld
ld.ubase.b64M op opcode=0x15 f5=0x5 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 读取 64 位ld
ld.ubase.b96M op opcode=0x15 f5=0x6 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 读取 96 位ld
ld.ubase.b128M op opcode=0x15 f5=0x7 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);d = 读取 128 位ld
ld.buf.u8M op opcode=0x15 f5=0x0 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 零扩展读取 8 位;越界 / null 读 0ld bc
ld.buf.i8M op opcode=0x15 f5=0x1 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 符号扩展读取 8 位;越界 / null 读 0ld bc
ld.buf.u16M op opcode=0x15 f5=0x2 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 零扩展读取 16 位;越界 / null 读 0ld bc
ld.buf.i16M op opcode=0x15 f5=0x3 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 符号扩展读取 16 位;越界 / null 读 0ld bc
ld.buf.b32M op opcode=0x15 f5=0x4 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 读取 32 位;越界 / null 读 0ld bc
ld.buf.b64M op opcode=0x15 f5=0x5 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 读取 64 位;越界 / null 读 0ld bc
ld.buf.b96M op opcode=0x15 f5=0x6 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 读取 96 位;越界 / null 读 0ld bc
ld.buf.b128M op opcode=0x15 f5=0x7 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);d = 读取 128 位;越界 / null 读 0ld bc
ld.shared.u8M op opcode=0x15 f5=0x0 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 零扩展读取 8 位ld
ld.shared.i8M op opcode=0x15 f5=0x1 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 符号扩展读取 8 位ld
ld.shared.u16M op opcode=0x15 f5=0x2 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 零扩展读取 16 位ld
ld.shared.i16M op opcode=0x15 f5=0x3 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 符号扩展读取 16 位ld
ld.shared.b32M op opcode=0x15 f5=0x4 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 读取 32 位ld
ld.shared.b64M op opcode=0x15 f5=0x5 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 读取 64 位ld
ld.shared.b96M op opcode=0x15 f5=0x6 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 读取 96 位ld
ld.shared.b128M op opcode=0x15 f5=0x7 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);d = 读取 128 位ld
ld.scratch.u8M op opcode=0x15 f5=0x0 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 零扩展读取 8 位ld
ld.scratch.i8M op opcode=0x15 f5=0x1 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 符号扩展读取 8 位ld
ld.scratch.u16M op opcode=0x15 f5=0x2 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 零扩展读取 16 位ld
ld.scratch.i16M op opcode=0x15 f5=0x3 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 符号扩展读取 16 位ld
ld.scratch.b32M op opcode=0x15 f5=0x4 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 读取 32 位ld
ld.scratch.b64M op opcode=0x15 f5=0x5 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 读取 64 位ld
ld.scratch.b96M op opcode=0x15 f5=0x6 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 读取 96 位ld
ld.scratch.b128M op opcode=0x15 f5=0x7 sp=0x4 f2=0x0async:vmA = lane 私有 scratch 地址 (s1 + sext(imm));d = 读取 128 位ld

向量存储(30 条)​

ST​

语法(Syntax)

st.global.b8 rd:v rs1:vp^2 imm:s24 cpol:cpol
st.global.b16 rd:v rs1:vp^2 imm:s24 cpol:cpol
st.global.b32 rd:v rs1:vp^2 imm:s24 cpol:cpol
st.global.b64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
st.global.b96 rd:v^3 rs1:vp^2 imm:s24 cpol:cpol
st.global.b128 rd:v^4 rs1:vp^2 imm:s24 cpol:cpol
st.ubase.b8 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
st.ubase.b16 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
st.ubase.b32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
st.ubase.b64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
st.ubase.b96 rd:v^3 rs2:up^2 rs1:v imm:s24 cpol:cpol
st.ubase.b128 rd:v^4 rs2:up^2 rs1:v imm:s24 cpol:cpol
st.buf.b8 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
st.buf.b16 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
st.buf.b32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
st.buf.b64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
st.buf.b96 rd:v^3 rs2:d4^4 rs1:v imm:s24 cpol:cpol
st.buf.b128 rd:v^4 rs2:d4^4 rs1:v imm:s24 cpol:cpol
st.shared.b8 rd:v rs1:v imm:s24
st.shared.b16 rd:v rs1:v imm:s24
st.shared.b32 rd:v rs1:v imm:s24
st.shared.b64 rd:v^2 rs1:v imm:s24
st.shared.b96 rd:v^3 rs1:v imm:s24
st.shared.b128 rd:v^4 rs1:v imm:s24
st.scratch.b8 rd:v rs1:v imm:s24
st.scratch.b16 rd:v rs1:v imm:s24
st.scratch.b32 rd:v rs1:v imm:s24
st.scratch.b64 rd:v^2 rs1:v imm:s24
st.scratch.b96 rd:v^3 rs1:v imm:s24
st.scratch.b128 rd:v^4 rs1:v imm:s24
变体编码延迟语义标志
st.global.b8M op opcode=0x19 f5=0x0 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);将数据寄存器低 8 位写入 Ast
st.global.b16M op opcode=0x19 f5=0x1 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);将数据寄存器低 16 位写入 Ast
st.global.b32M op opcode=0x19 f5=0x2 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);将数据寄存器低 32 位写入 Ast
st.global.b64M op opcode=0x19 f5=0x3 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);将数据寄存器低 64 位写入 Ast
st.global.b96M op opcode=0x19 f5=0x4 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);将数据寄存器低 96 位写入 Ast
st.global.b128M op opcode=0x19 f5=0x5 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);将数据寄存器低 128 位写入 Ast
st.ubase.b8M op opcode=0x19 f5=0x0 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);将数据寄存器低 8 位写入 Ast
st.ubase.b16M op opcode=0x19 f5=0x1 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);将数据寄存器低 16 位写入 Ast
st.ubase.b32M op opcode=0x19 f5=0x2 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);将数据寄存器低 32 位写入 Ast
st.ubase.b64M op opcode=0x19 f5=0x3 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);将数据寄存器低 64 位写入 Ast
st.ubase.b96M op opcode=0x19 f5=0x4 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);将数据寄存器低 96 位写入 Ast
st.ubase.b128M op opcode=0x19 f5=0x5 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);将数据寄存器低 128 位写入 Ast
st.buf.b8M op opcode=0x19 f5=0x0 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);将数据寄存器低 8 位写入 Ast bc
st.buf.b16M op opcode=0x19 f5=0x1 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);将数据寄存器低 16 位写入 Ast bc
st.buf.b32M op opcode=0x19 f5=0x2 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);将数据寄存器低 32 位写入 Ast bc
st.buf.b64M op opcode=0x19 f5=0x3 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);将数据寄存器低 64 位写入 Ast bc
st.buf.b96M op opcode=0x19 f5=0x4 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);将数据寄存器低 96 位写入 Ast bc
st.buf.b128M op opcode=0x19 f5=0x5 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);将数据寄存器低 128 位写入 Ast bc
st.shared.b8M op opcode=0x19 f5=0x0 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);将数据寄存器低 8 位写入 Ast
st.shared.b16M op opcode=0x19 f5=0x1 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);将数据寄存器低 16 位写入 Ast
st.shared.b32M op opcode=0x19 f5=0x2 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);将数据寄存器低 32 位写入 Ast
st.shared.b64M op opcode=0x19 f5=0x3 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);将数据寄存器低 64 位写入 Ast
st.shared.b96M op opcode=0x19 f5=0x4 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);将数据寄存器低 96 位写入 Ast
st.shared.b128M op opcode=0x19 f5=0x5 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);将数据寄存器低 128 位写入 Ast
st.scratch.b8M op opcode=0x19 f5=0x0 sp=0x4 f2=0x0async:vstA = lane 私有 scratch 地址 (s1 + sext(imm));将数据寄存器低 8 位写入 Ast
st.scratch.b16M op opcode=0x19 f5=0x1 sp=0x4 f2=0x0async:vstA = lane 私有 scratch 地址 (s1 + sext(imm));将数据寄存器低 16 位写入 Ast
st.scratch.b32M op opcode=0x19 f5=0x2 sp=0x4 f2=0x0async:vstA = lane 私有 scratch 地址 (s1 + sext(imm));将数据寄存器低 32 位写入 Ast
st.scratch.b64M op opcode=0x19 f5=0x3 sp=0x4 f2=0x0async:vstA = lane 私有 scratch 地址 (s1 + sext(imm));将数据寄存器低 64 位写入 Ast
st.scratch.b96M op opcode=0x19 f5=0x4 sp=0x4 f2=0x0async:vstA = lane 私有 scratch 地址 (s1 + sext(imm));将数据寄存器低 96 位写入 Ast
st.scratch.b128M op opcode=0x19 f5=0x5 sp=0x4 f2=0x0async:vstA = lane 私有 scratch 地址 (s1 + sext(imm));将数据寄存器低 128 位写入 Ast

原子(无返回)(104 条)​

ATOM​

语法(Syntax)

atom.global.add.u32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.sub.u32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.and.b32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.or.b32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.xor.b32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.i32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.i32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.u32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.u32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.xchg.b32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.cmpxchg.b32 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.inc.u32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.dec.u32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.fadd.f32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.fmin.f32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.fmax.f32 rd:v rs1:vp^2 imm:s24 cpol:cpol
atom.global.add.u64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.and.b64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.or.b64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.xor.b64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.i64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.i64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.u64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.u64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.xchg.b64 rd:v^2 rs1:vp^2 imm:s24 cpol:cpol
atom.global.cmpxchg.b64 rd:v^4 rs1:vp^2 imm:s24 cpol:cpol
atom.ubase.add.u32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.sub.u32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.and.b32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.or.b32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xor.b32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.i32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.i32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.u32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.u32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xchg.b32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.cmpxchg.b32 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.inc.u32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.dec.u32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.fadd.f32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.fmin.f32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.fmax.f32 rd:v rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.add.u64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.and.b64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.or.b64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xor.b64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.i64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.i64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.u64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.u64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xchg.b64 rd:v^2 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.cmpxchg.b64 rd:v^4 rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.buf.add.u32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.sub.u32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.and.b32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.or.b32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xor.b32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.i32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.i32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.u32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.u32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xchg.b32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.cmpxchg.b32 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.inc.u32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.dec.u32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.fadd.f32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.fmin.f32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.fmax.f32 rd:v rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.add.u64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.and.b64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.or.b64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xor.b64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.i64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.i64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.u64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.u64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xchg.b64 rd:v^2 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.cmpxchg.b64 rd:v^4 rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.shared.add.u32 rd:v rs1:v imm:s24
atom.shared.sub.u32 rd:v rs1:v imm:s24
atom.shared.and.b32 rd:v rs1:v imm:s24
atom.shared.or.b32 rd:v rs1:v imm:s24
atom.shared.xor.b32 rd:v rs1:v imm:s24
atom.shared.min.i32 rd:v rs1:v imm:s24
atom.shared.max.i32 rd:v rs1:v imm:s24
atom.shared.min.u32 rd:v rs1:v imm:s24
atom.shared.max.u32 rd:v rs1:v imm:s24
atom.shared.xchg.b32 rd:v rs1:v imm:s24
atom.shared.cmpxchg.b32 rd:v^2 rs1:v imm:s24
atom.shared.inc.u32 rd:v rs1:v imm:s24
atom.shared.dec.u32 rd:v rs1:v imm:s24
atom.shared.fadd.f32 rd:v rs1:v imm:s24
atom.shared.fmin.f32 rd:v rs1:v imm:s24
atom.shared.fmax.f32 rd:v rs1:v imm:s24
atom.shared.add.u64 rd:v^2 rs1:v imm:s24
atom.shared.and.b64 rd:v^2 rs1:v imm:s24
atom.shared.or.b64 rd:v^2 rs1:v imm:s24
atom.shared.xor.b64 rd:v^2 rs1:v imm:s24
atom.shared.min.i64 rd:v^2 rs1:v imm:s24
atom.shared.max.i64 rd:v^2 rs1:v imm:s24
atom.shared.min.u64 rd:v^2 rs1:v imm:s24
atom.shared.max.u64 rd:v^2 rs1:v imm:s24
atom.shared.xchg.b64 rd:v^2 rs1:v imm:s24
atom.shared.cmpxchg.b64 rd:v^4 rs1:v imm:s24
变体编码延迟语义标志
atom.global.add.u32M op opcode=0x1d f5=0x0 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] + dataat
atom.global.sub.u32M op opcode=0x1d f5=0x1 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] - dataat
atom.global.and.b32M op opcode=0x1d f5=0x2 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] & dataat
atom.global.or.b32M op opcode=0x1d f5=0x3 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] | dataat
atom.global.xor.b32M op opcode=0x1d f5=0x4 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] ^ dataat
atom.global.min.i32M op opcode=0x1d f5=0x5 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = min_s(M[A], data)at
atom.global.max.i32M op opcode=0x1d f5=0x6 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = max_s(M[A], data)at
atom.global.min.u32M op opcode=0x1d f5=0x7 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = min_u(M[A], data)at
atom.global.max.u32M op opcode=0x1d f5=0x8 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = max_u(M[A], data)at
atom.global.xchg.b32M op opcode=0x1d f5=0x9 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = data(交换)at
atom.global.cmpxchg.b32M op opcode=0x1d f5=0xa sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换)at
atom.global.inc.u32M op opcode=0x1d f5=0xb sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = (old >= data) ? 0 : old + 1(回绕递增)at
atom.global.dec.u32M op opcode=0x1d f5=0xc sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减)at
atom.global.fadd.f32M op opcode=0x1d f5=0xd sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] + data(binary32 原子加,固定 RNE)at opt
atom.global.fmin.f32M op opcode=0x1d f5=0xe sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = minimumNumber(M[A], data)at opt
atom.global.fmax.f32M op opcode=0x1d f5=0xf sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = maximumNumber(M[A], data)at opt
atom.global.add.u64M op opcode=0x1d f5=0x10 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] + dataat
atom.global.and.b64M op opcode=0x1d f5=0x11 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] & dataat
atom.global.or.b64M op opcode=0x1d f5=0x12 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] | dataat
atom.global.xor.b64M op opcode=0x1d f5=0x13 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] ^ dataat
atom.global.min.i64M op opcode=0x1d f5=0x14 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = min_s(M[A], data)at
atom.global.max.i64M op opcode=0x1d f5=0x15 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = max_s(M[A], data)at
atom.global.min.u64M op opcode=0x1d f5=0x16 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = min_u(M[A], data)at
atom.global.max.u64M op opcode=0x1d f5=0x17 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = max_u(M[A], data)at
atom.global.xchg.b64M op opcode=0x1d f5=0x18 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):M[A] = data(交换)at
atom.global.cmpxchg.b64M op opcode=0x1d f5=0x19 sp=0x0 f2=0x0async:vstA = s1_64 + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换)at
atom.ubase.add.u32M op opcode=0x1d f5=0x0 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] + dataat
atom.ubase.sub.u32M op opcode=0x1d f5=0x1 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] - dataat
atom.ubase.and.b32M op opcode=0x1d f5=0x2 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] & dataat
atom.ubase.or.b32M op opcode=0x1d f5=0x3 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] | dataat
atom.ubase.xor.b32M op opcode=0x1d f5=0x4 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] ^ dataat
atom.ubase.min.i32M op opcode=0x1d f5=0x5 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_s(M[A], data)at
atom.ubase.max.i32M op opcode=0x1d f5=0x6 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_s(M[A], data)at
atom.ubase.min.u32M op opcode=0x1d f5=0x7 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_u(M[A], data)at
atom.ubase.max.u32M op opcode=0x1d f5=0x8 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_u(M[A], data)at
atom.ubase.xchg.b32M op opcode=0x1d f5=0x9 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = data(交换)at
atom.ubase.cmpxchg.b32M op opcode=0x1d f5=0xa sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换)at
atom.ubase.inc.u32M op opcode=0x1d f5=0xb sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = (old >= data) ? 0 : old + 1(回绕递增)at
atom.ubase.dec.u32M op opcode=0x1d f5=0xc sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减)at
atom.ubase.fadd.f32M op opcode=0x1d f5=0xd sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] + data(binary32 原子加,固定 RNE)at opt
atom.ubase.fmin.f32M op opcode=0x1d f5=0xe sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = minimumNumber(M[A], data)at opt
atom.ubase.fmax.f32M op opcode=0x1d f5=0xf sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = maximumNumber(M[A], data)at opt
atom.ubase.add.u64M op opcode=0x1d f5=0x10 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] + dataat
atom.ubase.and.b64M op opcode=0x1d f5=0x11 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] & dataat
atom.ubase.or.b64M op opcode=0x1d f5=0x12 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] | dataat
atom.ubase.xor.b64M op opcode=0x1d f5=0x13 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] ^ dataat
atom.ubase.min.i64M op opcode=0x1d f5=0x14 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_s(M[A], data)at
atom.ubase.max.i64M op opcode=0x1d f5=0x15 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_s(M[A], data)at
atom.ubase.min.u64M op opcode=0x1d f5=0x16 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_u(M[A], data)at
atom.ubase.max.u64M op opcode=0x1d f5=0x17 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_u(M[A], data)at
atom.ubase.xchg.b64M op opcode=0x1d f5=0x18 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = data(交换)at
atom.ubase.cmpxchg.b64M op opcode=0x1d f5=0x19 sp=0x1 f2=0x0async:vstA = U64[u2] + zext(s1) + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换)at
atom.buf.add.u32M op opcode=0x1d f5=0x0 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] + dataat bc
atom.buf.sub.u32M op opcode=0x1d f5=0x1 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] - dataat bc
atom.buf.and.b32M op opcode=0x1d f5=0x2 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] & dataat bc
atom.buf.or.b32M op opcode=0x1d f5=0x3 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] | dataat bc
atom.buf.xor.b32M op opcode=0x1d f5=0x4 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] ^ dataat bc
atom.buf.min.i32M op opcode=0x1d f5=0x5 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_s(M[A], data)at bc
atom.buf.max.i32M op opcode=0x1d f5=0x6 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_s(M[A], data)at bc
atom.buf.min.u32M op opcode=0x1d f5=0x7 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_u(M[A], data)at bc
atom.buf.max.u32M op opcode=0x1d f5=0x8 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_u(M[A], data)at bc
atom.buf.xchg.b32M op opcode=0x1d f5=0x9 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = data(交换)at bc
atom.buf.cmpxchg.b32M op opcode=0x1d f5=0xa sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):if M[A] == data0: M[A] = data1(比较交换)at bc
atom.buf.inc.u32M op opcode=0x1d f5=0xb sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = (old >= data) ? 0 : old + 1(回绕递增)at bc
atom.buf.dec.u32M op opcode=0x1d f5=0xc sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减)at bc
atom.buf.fadd.f32M op opcode=0x1d f5=0xd sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] + data(binary32 原子加,固定 RNE)at bc opt
atom.buf.fmin.f32M op opcode=0x1d f5=0xe sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = minimumNumber(M[A], data)at bc opt
atom.buf.fmax.f32M op opcode=0x1d f5=0xf sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = maximumNumber(M[A], data)at bc opt
atom.buf.add.u64M op opcode=0x1d f5=0x10 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] + dataat bc
atom.buf.and.b64M op opcode=0x1d f5=0x11 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] & dataat bc
atom.buf.or.b64M op opcode=0x1d f5=0x12 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] | dataat bc
atom.buf.xor.b64M op opcode=0x1d f5=0x13 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] ^ dataat bc
atom.buf.min.i64M op opcode=0x1d f5=0x14 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_s(M[A], data)at bc
atom.buf.max.i64M op opcode=0x1d f5=0x15 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_s(M[A], data)at bc
atom.buf.min.u64M op opcode=0x1d f5=0x16 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_u(M[A], data)at bc
atom.buf.max.u64M op opcode=0x1d f5=0x17 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_u(M[A], data)at bc
atom.buf.xchg.b64M op opcode=0x1d f5=0x18 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = data(交换)at bc
atom.buf.cmpxchg.b64M op opcode=0x1d f5=0x19 sp=0x2 f2=0x0async:vstA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):if M[A] == data0: M[A] = data1(比较交换)at bc
atom.shared.add.u32M op opcode=0x1d f5=0x0 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] + dataat
atom.shared.sub.u32M op opcode=0x1d f5=0x1 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] - dataat
atom.shared.and.b32M op opcode=0x1d f5=0x2 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] & dataat
atom.shared.or.b32M op opcode=0x1d f5=0x3 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] | dataat
atom.shared.xor.b32M op opcode=0x1d f5=0x4 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] ^ dataat
atom.shared.min.i32M op opcode=0x1d f5=0x5 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_s(M[A], data)at
atom.shared.max.i32M op opcode=0x1d f5=0x6 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_s(M[A], data)at
atom.shared.min.u32M op opcode=0x1d f5=0x7 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_u(M[A], data)at
atom.shared.max.u32M op opcode=0x1d f5=0x8 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_u(M[A], data)at
atom.shared.xchg.b32M op opcode=0x1d f5=0x9 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = data(交换)at
atom.shared.cmpxchg.b32M op opcode=0x1d f5=0xa sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):if M[A] == data0: M[A] = data1(比较交换)at
atom.shared.inc.u32M op opcode=0x1d f5=0xb sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = (old >= data) ? 0 : old + 1(回绕递增)at
atom.shared.dec.u32M op opcode=0x1d f5=0xc sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减)at
atom.shared.fadd.f32M op opcode=0x1d f5=0xd sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] + data(binary32 原子加,固定 RNE)at opt
atom.shared.fmin.f32M op opcode=0x1d f5=0xe sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = minimumNumber(M[A], data)at opt
atom.shared.fmax.f32M op opcode=0x1d f5=0xf sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = maximumNumber(M[A], data)at opt
atom.shared.add.u64M op opcode=0x1d f5=0x10 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] + dataat
atom.shared.and.b64M op opcode=0x1d f5=0x11 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] & dataat
atom.shared.or.b64M op opcode=0x1d f5=0x12 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] | dataat
atom.shared.xor.b64M op opcode=0x1d f5=0x13 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] ^ dataat
atom.shared.min.i64M op opcode=0x1d f5=0x14 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_s(M[A], data)at
atom.shared.max.i64M op opcode=0x1d f5=0x15 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_s(M[A], data)at
atom.shared.min.u64M op opcode=0x1d f5=0x16 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_u(M[A], data)at
atom.shared.max.u64M op opcode=0x1d f5=0x17 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_u(M[A], data)at
atom.shared.xchg.b64M op opcode=0x1d f5=0x18 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = data(交换)at
atom.shared.cmpxchg.b64M op opcode=0x1d f5=0x19 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):if M[A] == data0: M[A] = data1(比较交换)at

原子(返回旧值 .rtn)(104 条)​

ATOM​

语法(Syntax)

atom.global.add.u32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.sub.u32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.and.b32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.or.b32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.xor.b32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.i32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.i32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.u32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.u32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.xchg.b32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.cmpxchg.b32.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.inc.u32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.dec.u32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.fadd.f32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.fmin.f32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.fmax.f32.rtn rd:v* rs1:vp^2 imm:s24 cpol:cpol
atom.global.add.u64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.and.b64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.or.b64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.xor.b64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.i64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.i64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.min.u64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.max.u64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.xchg.b64.rtn rd:v^2* rs1:vp^2 imm:s24 cpol:cpol
atom.global.cmpxchg.b64.rtn rd:v^4* rs1:vp^2 imm:s24 cpol:cpol
atom.ubase.add.u32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.sub.u32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.and.b32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.or.b32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xor.b32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.i32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.i32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.u32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.u32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xchg.b32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.cmpxchg.b32.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.inc.u32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.dec.u32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.fadd.f32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.fmin.f32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.fmax.f32.rtn rd:v* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.add.u64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.and.b64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.or.b64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xor.b64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.i64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.i64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.min.u64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.max.u64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.xchg.b64.rtn rd:v^2* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.ubase.cmpxchg.b64.rtn rd:v^4* rs2:up^2 rs1:v imm:s24 cpol:cpol
atom.buf.add.u32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.sub.u32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.and.b32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.or.b32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xor.b32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.i32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.i32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.u32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.u32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xchg.b32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.cmpxchg.b32.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.inc.u32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.dec.u32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.fadd.f32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.fmin.f32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.fmax.f32.rtn rd:v* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.add.u64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.and.b64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.or.b64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xor.b64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.i64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.i64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.min.u64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.max.u64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.xchg.b64.rtn rd:v^2* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.buf.cmpxchg.b64.rtn rd:v^4* rs2:d4^4 rs1:v imm:s24 cpol:cpol
atom.shared.add.u32.rtn rd:v* rs1:v imm:s24
atom.shared.sub.u32.rtn rd:v* rs1:v imm:s24
atom.shared.and.b32.rtn rd:v* rs1:v imm:s24
atom.shared.or.b32.rtn rd:v* rs1:v imm:s24
atom.shared.xor.b32.rtn rd:v* rs1:v imm:s24
atom.shared.min.i32.rtn rd:v* rs1:v imm:s24
atom.shared.max.i32.rtn rd:v* rs1:v imm:s24
atom.shared.min.u32.rtn rd:v* rs1:v imm:s24
atom.shared.max.u32.rtn rd:v* rs1:v imm:s24
atom.shared.xchg.b32.rtn rd:v* rs1:v imm:s24
atom.shared.cmpxchg.b32.rtn rd:v^2* rs1:v imm:s24
atom.shared.inc.u32.rtn rd:v* rs1:v imm:s24
atom.shared.dec.u32.rtn rd:v* rs1:v imm:s24
atom.shared.fadd.f32.rtn rd:v* rs1:v imm:s24
atom.shared.fmin.f32.rtn rd:v* rs1:v imm:s24
atom.shared.fmax.f32.rtn rd:v* rs1:v imm:s24
atom.shared.add.u64.rtn rd:v^2* rs1:v imm:s24
atom.shared.and.b64.rtn rd:v^2* rs1:v imm:s24
atom.shared.or.b64.rtn rd:v^2* rs1:v imm:s24
atom.shared.xor.b64.rtn rd:v^2* rs1:v imm:s24
atom.shared.min.i64.rtn rd:v^2* rs1:v imm:s24
atom.shared.max.i64.rtn rd:v^2* rs1:v imm:s24
atom.shared.min.u64.rtn rd:v^2* rs1:v imm:s24
atom.shared.max.u64.rtn rd:v^2* rs1:v imm:s24
atom.shared.xchg.b64.rtn rd:v^2* rs1:v imm:s24
atom.shared.cmpxchg.b64.rtn rd:v^4* rs1:v imm:s24
变体编码延迟语义标志
atom.global.add.u32.rtnM op opcode=0x21 f5=0x0 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] + data;旧值写回 rdat
atom.global.sub.u32.rtnM op opcode=0x21 f5=0x1 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] - data;旧值写回 rdat
atom.global.and.b32.rtnM op opcode=0x21 f5=0x2 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] & data;旧值写回 rdat
atom.global.or.b32.rtnM op opcode=0x21 f5=0x3 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] | data;旧值写回 rdat
atom.global.xor.b32.rtnM op opcode=0x21 f5=0x4 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] ^ data;旧值写回 rdat
atom.global.min.i32.rtnM op opcode=0x21 f5=0x5 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = min_s(M[A], data);旧值写回 rdat
atom.global.max.i32.rtnM op opcode=0x21 f5=0x6 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = max_s(M[A], data);旧值写回 rdat
atom.global.min.u32.rtnM op opcode=0x21 f5=0x7 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = min_u(M[A], data);旧值写回 rdat
atom.global.max.u32.rtnM op opcode=0x21 f5=0x8 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = max_u(M[A], data);旧值写回 rdat
atom.global.xchg.b32.rtnM op opcode=0x21 f5=0x9 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = data(交换);旧值写回 rdat
atom.global.cmpxchg.b32.rtnM op opcode=0x21 f5=0xa sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat
atom.global.inc.u32.rtnM op opcode=0x21 f5=0xb sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = (old >= data) ? 0 : old + 1(回绕递增);旧值写回 rdat
atom.global.dec.u32.rtnM op opcode=0x21 f5=0xc sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减);旧值写回 rdat
atom.global.fadd.f32.rtnM op opcode=0x21 f5=0xd sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] + data(binary32 原子加,固定 RNE);旧值写回 rdat opt
atom.global.fmin.f32.rtnM op opcode=0x21 f5=0xe sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = minimumNumber(M[A], data);旧值写回 rdat opt
atom.global.fmax.f32.rtnM op opcode=0x21 f5=0xf sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = maximumNumber(M[A], data);旧值写回 rdat opt
atom.global.add.u64.rtnM op opcode=0x21 f5=0x10 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] + data;旧值写回 rdat
atom.global.and.b64.rtnM op opcode=0x21 f5=0x11 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] & data;旧值写回 rdat
atom.global.or.b64.rtnM op opcode=0x21 f5=0x12 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] | data;旧值写回 rdat
atom.global.xor.b64.rtnM op opcode=0x21 f5=0x13 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = M[A] ^ data;旧值写回 rdat
atom.global.min.i64.rtnM op opcode=0x21 f5=0x14 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = min_s(M[A], data);旧值写回 rdat
atom.global.max.i64.rtnM op opcode=0x21 f5=0x15 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = max_s(M[A], data);旧值写回 rdat
atom.global.min.u64.rtnM op opcode=0x21 f5=0x16 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = min_u(M[A], data);旧值写回 rdat
atom.global.max.u64.rtnM op opcode=0x21 f5=0x17 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = max_u(M[A], data);旧值写回 rdat
atom.global.xchg.b64.rtnM op opcode=0x21 f5=0x18 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):M[A] = data(交换);旧值写回 rdat
atom.global.cmpxchg.b64.rtnM op opcode=0x21 f5=0x19 sp=0x0 f2=0x0async:vmA = s1_64 + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat
atom.ubase.add.u32.rtnM op opcode=0x21 f5=0x0 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] + data;旧值写回 rdat
atom.ubase.sub.u32.rtnM op opcode=0x21 f5=0x1 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] - data;旧值写回 rdat
atom.ubase.and.b32.rtnM op opcode=0x21 f5=0x2 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] & data;旧值写回 rdat
atom.ubase.or.b32.rtnM op opcode=0x21 f5=0x3 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] | data;旧值写回 rdat
atom.ubase.xor.b32.rtnM op opcode=0x21 f5=0x4 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] ^ data;旧值写回 rdat
atom.ubase.min.i32.rtnM op opcode=0x21 f5=0x5 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_s(M[A], data);旧值写回 rdat
atom.ubase.max.i32.rtnM op opcode=0x21 f5=0x6 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_s(M[A], data);旧值写回 rdat
atom.ubase.min.u32.rtnM op opcode=0x21 f5=0x7 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_u(M[A], data);旧值写回 rdat
atom.ubase.max.u32.rtnM op opcode=0x21 f5=0x8 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_u(M[A], data);旧值写回 rdat
atom.ubase.xchg.b32.rtnM op opcode=0x21 f5=0x9 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = data(交换);旧值写回 rdat
atom.ubase.cmpxchg.b32.rtnM op opcode=0x21 f5=0xa sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat
atom.ubase.inc.u32.rtnM op opcode=0x21 f5=0xb sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = (old >= data) ? 0 : old + 1(回绕递增);旧值写回 rdat
atom.ubase.dec.u32.rtnM op opcode=0x21 f5=0xc sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减);旧值写回 rdat
atom.ubase.fadd.f32.rtnM op opcode=0x21 f5=0xd sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] + data(binary32 原子加,固定 RNE);旧值写回 rdat opt
atom.ubase.fmin.f32.rtnM op opcode=0x21 f5=0xe sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = minimumNumber(M[A], data);旧值写回 rdat opt
atom.ubase.fmax.f32.rtnM op opcode=0x21 f5=0xf sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = maximumNumber(M[A], data);旧值写回 rdat opt
atom.ubase.add.u64.rtnM op opcode=0x21 f5=0x10 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] + data;旧值写回 rdat
atom.ubase.and.b64.rtnM op opcode=0x21 f5=0x11 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] & data;旧值写回 rdat
atom.ubase.or.b64.rtnM op opcode=0x21 f5=0x12 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] | data;旧值写回 rdat
atom.ubase.xor.b64.rtnM op opcode=0x21 f5=0x13 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = M[A] ^ data;旧值写回 rdat
atom.ubase.min.i64.rtnM op opcode=0x21 f5=0x14 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_s(M[A], data);旧值写回 rdat
atom.ubase.max.i64.rtnM op opcode=0x21 f5=0x15 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_s(M[A], data);旧值写回 rdat
atom.ubase.min.u64.rtnM op opcode=0x21 f5=0x16 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = min_u(M[A], data);旧值写回 rdat
atom.ubase.max.u64.rtnM op opcode=0x21 f5=0x17 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = max_u(M[A], data);旧值写回 rdat
atom.ubase.xchg.b64.rtnM op opcode=0x21 f5=0x18 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):M[A] = data(交换);旧值写回 rdat
atom.ubase.cmpxchg.b64.rtnM op opcode=0x21 f5=0x19 sp=0x1 f2=0x0async:vmA = U64[u2] + zext(s1) + sext(imm);(L2 原子):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat
atom.buf.add.u32.rtnM op opcode=0x21 f5=0x0 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] + data;旧值写回 rdat bc
atom.buf.sub.u32.rtnM op opcode=0x21 f5=0x1 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] - data;旧值写回 rdat bc
atom.buf.and.b32.rtnM op opcode=0x21 f5=0x2 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] & data;旧值写回 rdat bc
atom.buf.or.b32.rtnM op opcode=0x21 f5=0x3 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] | data;旧值写回 rdat bc
atom.buf.xor.b32.rtnM op opcode=0x21 f5=0x4 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] ^ data;旧值写回 rdat bc
atom.buf.min.i32.rtnM op opcode=0x21 f5=0x5 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_s(M[A], data);旧值写回 rdat bc
atom.buf.max.i32.rtnM op opcode=0x21 f5=0x6 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_s(M[A], data);旧值写回 rdat bc
atom.buf.min.u32.rtnM op opcode=0x21 f5=0x7 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_u(M[A], data);旧值写回 rdat bc
atom.buf.max.u32.rtnM op opcode=0x21 f5=0x8 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_u(M[A], data);旧值写回 rdat bc
atom.buf.xchg.b32.rtnM op opcode=0x21 f5=0x9 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = data(交换);旧值写回 rdat bc
atom.buf.cmpxchg.b32.rtnM op opcode=0x21 f5=0xa sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat bc
atom.buf.inc.u32.rtnM op opcode=0x21 f5=0xb sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = (old >= data) ? 0 : old + 1(回绕递增);旧值写回 rdat bc
atom.buf.dec.u32.rtnM op opcode=0x21 f5=0xc sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减);旧值写回 rdat bc
atom.buf.fadd.f32.rtnM op opcode=0x21 f5=0xd sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] + data(binary32 原子加,固定 RNE);旧值写回 rdat bc opt
atom.buf.fmin.f32.rtnM op opcode=0x21 f5=0xe sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = minimumNumber(M[A], data);旧值写回 rdat bc opt
atom.buf.fmax.f32.rtnM op opcode=0x21 f5=0xf sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = maximumNumber(M[A], data);旧值写回 rdat bc opt
atom.buf.add.u64.rtnM op opcode=0x21 f5=0x10 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] + data;旧值写回 rdat bc
atom.buf.and.b64.rtnM op opcode=0x21 f5=0x11 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] & data;旧值写回 rdat bc
atom.buf.or.b64.rtnM op opcode=0x21 f5=0x12 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] | data;旧值写回 rdat bc
atom.buf.xor.b64.rtnM op opcode=0x21 f5=0x13 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = M[A] ^ data;旧值写回 rdat bc
atom.buf.min.i64.rtnM op opcode=0x21 f5=0x14 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_s(M[A], data);旧值写回 rdat bc
atom.buf.max.i64.rtnM op opcode=0x21 f5=0x15 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_s(M[A], data);旧值写回 rdat bc
atom.buf.min.u64.rtnM op opcode=0x21 f5=0x16 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = min_u(M[A], data);旧值写回 rdat bc
atom.buf.max.u64.rtnM op opcode=0x21 f5=0x17 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = max_u(M[A], data);旧值写回 rdat bc
atom.buf.xchg.b64.rtnM op opcode=0x21 f5=0x18 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):M[A] = data(交换);旧值写回 rdat bc
atom.buf.cmpxchg.b64.rtnM op opcode=0x21 f5=0x19 sp=0x2 f2=0x0async:vmA = DESC(u2..u2+3).base + s1 + sext(imm)(按 DESC.size 越界检查);(L2 原子):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat bc
atom.shared.add.u32.rtnM op opcode=0x21 f5=0x0 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] + data;旧值写回 rdat
atom.shared.sub.u32.rtnM op opcode=0x21 f5=0x1 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] - data;旧值写回 rdat
atom.shared.and.b32.rtnM op opcode=0x21 f5=0x2 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] & data;旧值写回 rdat
atom.shared.or.b32.rtnM op opcode=0x21 f5=0x3 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] | data;旧值写回 rdat
atom.shared.xor.b32.rtnM op opcode=0x21 f5=0x4 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] ^ data;旧值写回 rdat
atom.shared.min.i32.rtnM op opcode=0x21 f5=0x5 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_s(M[A], data);旧值写回 rdat
atom.shared.max.i32.rtnM op opcode=0x21 f5=0x6 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_s(M[A], data);旧值写回 rdat
atom.shared.min.u32.rtnM op opcode=0x21 f5=0x7 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_u(M[A], data);旧值写回 rdat
atom.shared.max.u32.rtnM op opcode=0x21 f5=0x8 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_u(M[A], data);旧值写回 rdat
atom.shared.xchg.b32.rtnM op opcode=0x21 f5=0x9 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = data(交换);旧值写回 rdat
atom.shared.cmpxchg.b32.rtnM op opcode=0x21 f5=0xa sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat
atom.shared.inc.u32.rtnM op opcode=0x21 f5=0xb sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = (old >= data) ? 0 : old + 1(回绕递增);旧值写回 rdat
atom.shared.dec.u32.rtnM op opcode=0x21 f5=0xc sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = (old == 0 || old > data) ? data : old - 1(回绕递减);旧值写回 rdat
atom.shared.fadd.f32.rtnM op opcode=0x21 f5=0xd sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] + data(binary32 原子加,固定 RNE);旧值写回 rdat opt
atom.shared.fmin.f32.rtnM op opcode=0x21 f5=0xe sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = minimumNumber(M[A], data);旧值写回 rdat opt
atom.shared.fmax.f32.rtnM op opcode=0x21 f5=0xf sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = maximumNumber(M[A], data);旧值写回 rdat opt
atom.shared.add.u64.rtnM op opcode=0x21 f5=0x10 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] + data;旧值写回 rdat
atom.shared.and.b64.rtnM op opcode=0x21 f5=0x11 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] & data;旧值写回 rdat
atom.shared.or.b64.rtnM op opcode=0x21 f5=0x12 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] | data;旧值写回 rdat
atom.shared.xor.b64.rtnM op opcode=0x21 f5=0x13 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = M[A] ^ data;旧值写回 rdat
atom.shared.min.i64.rtnM op opcode=0x21 f5=0x14 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_s(M[A], data);旧值写回 rdat
atom.shared.max.i64.rtnM op opcode=0x21 f5=0x15 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_s(M[A], data);旧值写回 rdat
atom.shared.min.u64.rtnM op opcode=0x21 f5=0x16 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = min_u(M[A], data);旧值写回 rdat
atom.shared.max.u64.rtnM op opcode=0x21 f5=0x17 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = max_u(M[A], data);旧值写回 rdat
atom.shared.xchg.b64.rtnM op opcode=0x21 f5=0x18 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):M[A] = data(交换);旧值写回 rdat
atom.shared.cmpxchg.b64.rtnM op opcode=0x21 f5=0x19 sp=0x3 f2=0x0async:lsA = s1 + sext(imm)(workgroup shared 窗口);(shared 内):if M[A] == data0: M[A] = data1(比较交换);旧值写回 rdat

uniform 标量加载(20 条)​

ULD​

语法(Syntax)

uld.b32 rd:u rs1:up^2 imm:s24 cpol:cpol
uld.b64 rd:u^2 rs1:up^2 imm:s24 cpol:cpol
uld.b128 rd:u^4 rs1:up^2 imm:s24 cpol:cpol
uld.b256 rd:u^8 rs1:up^2 imm:s24 cpol:cpol
uld.b512 rd:u^16 rs1:up^2 imm:s24 cpol:cpol
uld.x.b32 rd:u rs1:up^2 rs2:u imm:s24 cpol:cpol
uld.x.b64 rd:u^2 rs1:up^2 rs2:u imm:s24 cpol:cpol
uld.x.b128 rd:u^4 rs1:up^2 rs2:u imm:s24 cpol:cpol
uld.x.b256 rd:u^8 rs1:up^2 rs2:u imm:s24 cpol:cpol
uld.x.b512 rd:u^16 rs1:up^2 rs2:u imm:s24 cpol:cpol
uld.buf.b32 rd:u rs1:d4^4 imm:s24 cpol:cpol
uld.buf.b64 rd:u^2 rs1:d4^4 imm:s24 cpol:cpol
uld.buf.b128 rd:u^4 rs1:d4^4 imm:s24 cpol:cpol
uld.buf.b256 rd:u^8 rs1:d4^4 imm:s24 cpol:cpol
uld.buf.b512 rd:u^16 rs1:d4^4 imm:s24 cpol:cpol
uld.bufx.b32 rd:u rs1:d4^4 rs2:u imm:s24 cpol:cpol
uld.bufx.b64 rd:u^2 rs1:d4^4 rs2:u imm:s24 cpol:cpol
uld.bufx.b128 rd:u^4 rs1:d4^4 rs2:u imm:s24 cpol:cpol
uld.bufx.b256 rd:u^8 rs1:d4^4 rs2:u imm:s24 cpol:cpol
uld.bufx.b512 rd:u^16 rs1:d4^4 rs2:u imm:s24 cpol:cpol
变体编码延迟语义标志
uld.b32UM op opcode=0x25 f7=0x0async:smA = U64[u1] + sext(imm);加载 1 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.b64UM op opcode=0x25 f7=0x1async:smA = U64[u1] + sext(imm);加载 2 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.b128UM op opcode=0x25 f7=0x2async:smA = U64[u1] + sext(imm);加载 4 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.b256UM op opcode=0x25 f7=0x3async:smA = U64[u1] + sext(imm);加载 8 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.b512UM op opcode=0x25 f7=0x4async:smA = U64[u1] + sext(imm);加载 16 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.x.b32UM op opcode=0x25 f7=0x8async:smA = U64[u1] + u2 + sext(imm);加载 1 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.x.b64UM op opcode=0x25 f7=0x9async:smA = U64[u1] + u2 + sext(imm);加载 2 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.x.b128UM op opcode=0x25 f7=0xaasync:smA = U64[u1] + u2 + sext(imm);加载 4 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.x.b256UM op opcode=0x25 f7=0xbasync:smA = U64[u1] + u2 + sext(imm);加载 8 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.x.b512UM op opcode=0x25 f7=0xcasync:smA = U64[u1] + u2 + sext(imm);加载 16 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei
uld.buf.b32UM op opcode=0x25 f7=0x10async:smA = DESC(u1..u1+3).base + sext(imm)(越界 / null 读 0);加载 1 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.buf.b64UM op opcode=0x25 f7=0x11async:smA = DESC(u1..u1+3).base + sext(imm)(越界 / null 读 0);加载 2 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.buf.b128UM op opcode=0x25 f7=0x12async:smA = DESC(u1..u1+3).base + sext(imm)(越界 / null 读 0);加载 4 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.buf.b256UM op opcode=0x25 f7=0x13async:smA = DESC(u1..u1+3).base + sext(imm)(越界 / null 读 0);加载 8 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.buf.b512UM op opcode=0x25 f7=0x14async:smA = DESC(u1..u1+3).base + sext(imm)(越界 / null 读 0);加载 16 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.bufx.b32UM op opcode=0x25 f7=0x18async:smA = DESC(u1..u1+3).base + u2 + sext(imm)(越界读 0);加载 1 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.bufx.b64UM op opcode=0x25 f7=0x19async:smA = DESC(u1..u1+3).base + u2 + sext(imm)(越界读 0);加载 2 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.bufx.b128UM op opcode=0x25 f7=0x1aasync:smA = DESC(u1..u1+3).base + u2 + sext(imm)(越界读 0);加载 4 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.bufx.b256UM op opcode=0x25 f7=0x1basync:smA = DESC(u1..u1+3).base + u2 + sext(imm)(越界读 0);加载 8 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc
uld.bufx.b512UM op opcode=0x25 f7=0x1casync:smA = DESC(u1..u1+3).base + u2 + sext(imm)(越界读 0);加载 16 个 dword 到 U[d..](无视 EXEC,标量路径)ld ei bc